#我是c++的菜鳥,我想來發文記錄一下我的學習#
今天我在寫zerogudge 的題目,a040(阿姆斯壯數)的時候發生了很詭異的事情,
當我執行的時候可怕的是就發生了!!
我輸入:99 1000 //註解:搜尋99到1000的阿姆斯壯數。
程式輸出:370 371 407//註解:99到1000的阿姆斯壯數。
What!! 什麼鬼,153到哪裡去了??
本因該輸出:153 370 371 407的阿~
以下是我發現錯誤前的程式碼
#include <iostream>
#include <math.h>
using namespace std;
int get_length(int x)
{
int leng=0;
while(x)
{
x/=10;
leng++;
}
return leng;
}
int get_sum(int y)
{
int n=get_length(y);
int sum=0;
for(int i=n;i>0;i--)
{
int single=y/pow(10,i-1);
single =single % 10;
double singlePow=pow(single,n);
sum=singlePow+sum;
}
return sum;
}
int main()
{
int start;
int end;
int count=0;
cin>>start;
cin>>end;
for(;start<=end;start++)
{
if(get_sum(start)==start)
{
cout<<start<<" ";
count=count+1;
}
}
if(count==0)
{
cout<<"none"<<endl;
}
}
不過後來我把有存pow()這個函式的型別從int改成double就解決這個問題了,
但是為什麼會這樣我還是不太清楚。
各位高手如有閒情雅致就請幫我解答吧~~
路過,強迫症排版一下
#include <iostream>
#include <math.h>
using namespace std;
int get_length(int x) {
int leng = 0;
while (x)
{
x /= 10;
leng++;
}
return leng;
}
int get_sum(int y) {
int n = get_length(y);
int sum = 0;
for (int i = n; i > 0; --i)
{
int single = y / pow(10, i - 1);
single = single % 10;
sum += pow(single, n);
}
return sum;
}
int main() {
int start;
int end;
int count = 0;
cin >> start;
cin >> end;
for (; start <= end; ++start)
{
if (get_sum(start) == start)
{
cout << start << " ";
count++;
}
}
if (count == 0)
{
cout << "none" << endl;
}
return 0;
}